package com.mine.common.utils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @Author xu
 * @Date 2025/4/8
 **/
public class ExcelExtractorUtils {

    /**
     * 从字符串中提取第一个匹配的数字（支持整数、小数、正负数）
     *
     * @param input 输入字符串（例如："3支"、"22台"、"-5.5℃"）
     * @return 提取的数字字符串，未找到返回 null
     */
    public static String extractNumber(String input) {
        if (input == null || input.isEmpty()) {
            return null;
        }
        // 正则匹配数字（支持正负号、整数、小数）
        Pattern pattern = Pattern.compile("[-+]?\\d+\\.?\\d*");
        Matcher matcher = pattern.matcher(input);

        if (matcher.find()) {
            return matcher.group();
        }
        return null;
    }

    /**
     * 提取数字并转换为 Double
     *
     * @param input 输入字符串
     * @return 转换后的 Double，未找到返回 null
     */
    public static Integer extractNumberAsInteger(String input) {
        String numberStr = extractNumber(input);
        return numberStr != null ? Integer.parseInt(numberStr) : 0;
    }

    /**
     * 提取数字并转换为 Double
     *
     * @param input 输入字符串
     * @return 转换后的 Double，未找到返回 null
     */
    public static Double extractNumberAsDouble(String input) {
        String numberStr = extractNumber(input);
        return numberStr != null ? Double.parseDouble(numberStr) : 0.0;
    }

    /**
     * 将 Excel 日期序列数转为日期字符串
     *
     * @param excelDateNumber Excel 日期序列数（例如：42522）
     * @param dateFormat      目标格式（例如："yyyy-MM-dd"）
     * @return 格式化后的日期字符串
     */
    public static String convertExcelDateToStr(long excelDateNumber, String dateFormat) {
        // Excel 日期系统从 1900-01-01 开始，但存在闰年错误，需减去 1 天
        LocalDate baseDate = LocalDate.of(1899, 12, 30);
        LocalDate resultDate = baseDate.plusDays(excelDateNumber);
        return resultDate.format(DateTimeFormatter.ofPattern(dateFormat));
    }

}
